05 sample_laybtn_ease.hsp

sample\ 05 sample_laybtn_ease.hsp

#include "mod_layerbutton.hsp"

// ボタン作成
pos 10,100
repeat 4
	tien = 10*cnt
	pos ,ginfo_cy+10
	layerbutton 180,60, tien, 0, 30+tien,20,0, 15+tien/2,10,0 {
		if lparam == objlayer_cmddraw {
			color 0,0,0 : font msgothic, 18, 1
			ti = objlayer_option
			// ボタン状態で分岐 (+イージングで表示位置,色を変える)
			switch layerbtn_stat
			case LAYBTN_SHOW_IN
				color 0,0,255 : rboxfao_auto objlayer_axis_x-laybtn_ease(200, 0, ti), objlayer_axis_y, objlayer_axis_x2-laybtn_ease(200, 0, ti), objlayer_axis_y2
				color 250,250,250 : laybtn_mes "遅延="+ti,0, 1,1, -laybtn_ease(200, 0, ti)
				swbreak
			case LAYBTN_FOCUS_IN
				color laybtn_ease(0,128),0,255 : rboxfao_auto objlayer_axis_x, objlayer_axis_y, objlayer_axis_x2, objlayer_axis_y2
				color 250,250,250 : laybtn_mes "遅延="+ti,0, 1,1
				swbreak
			case LAYBTN_FOCUS_OUT
				color laybtn_ease(128,0),0,255 : rboxfao_auto objlayer_axis_x, objlayer_axis_y, objlayer_axis_x2, objlayer_axis_y2
				color 250,250,250 : laybtn_mes "遅延="+ti,0, 1,1
				swbreak
			case LAYBTN_PRESS_IN
				color 128,128,255 : rboxfao_auto objlayer_axis_x, objlayer_axis_y, objlayer_axis_x2, objlayer_axis_y2
				color 250,250,250 : laybtn_mes "遅延="+ti,0, 1,1
				swbreak
			case LAYBTN_SHOW_OUT
			case LAYBTN_SHOW_OUT_SELECTED
				if layerbtn_stat & LAYBTN_SELECTED { color 128,128,255 } else { color 0,0,255 }
				rboxfao_auto objlayer_axis_x-laybtn_ease(0, 200, ti/2), objlayer_axis_y, objlayer_axis_x2-laybtn_ease(0, 200, ti/2), objlayer_axis_y2
				color 250,250,250 : laybtn_mes "遅延="+ti,0, 1,1, -laybtn_ease(0, 200, ti/2)
				swbreak
			swend
		}
		return
	}
loop
// 表示ループ
repeat
	redraw 0 : color 255,255,255 : boxf : color : pos 0,0 : font msgothic,17
	redraw 1
	await 1000/60
loop


// 描画モジュール
#module
#deffunc lineArray array arr, int p1, int ox, int oy
	pos ox+arr(0),oy+arr(1)
	repeat limit(p1-1,0,length(arr)/2-1),1
		line ox+arr(cnt*2),oy+arr(cnt*2+1)
	loop
	return
#deffunc boxfao int ax, int ay, int bx, int by, int ox, int oy
	pdx=ax+ox,bx+ox,bx+ox,ax+ox
	pdy=ay+oy,ay+oy,by+oy,by+oy
	gsquare -1,pdx,pdy
	return
#deffunc trianglefao int ax, int ay, int bx, int by, int cx, int cy, int ox, int oy
	pdx=ax+ox,bx+ox,cx+ox,ax+ox
	pdy=ay+oy,by+oy,cy+oy,ay+oy
	gsquare -1,pdx,pdy
	return
#deffunc quadfao int ax, int ay, int bx, int by, int cx, int cy, int dx, int dy, int ox, int oy
	pdx=ax+ox,bx+ox,cx+ox,dx+ox
	pdy=ay+oy,by+oy,cy+oy,dy+oy
	gsquare -1,pdx,pdy
	return
#deffunc circlefao int x1, int y1, int x2, int y2, int thick, int div, int ox, int oy
    dcx = double(x1 + x2) / 2.0 + ox
    dcy = double(y1 + y2) / 2.0 + oy
    rx = absf(x2 - x1) / 2.0
    ry = absf(y2 - y1) / 2.0
    if rx < 1 || ry < 1 : return
	div_ = div : if div_ <= 0 : div_ = limit((rx+ry)/4, 12, 128)
	if thick == 1 {
		repeat div_
			ang1 = 2.0 * M_PI * cnt / div_
			ang2 = 2.0 * M_PI * (cnt+1) / div_
			x3 = dcx + cos(ang1) * rx
			y3 = dcy + sin(ang1) * ry
			x4 = dcx + cos(ang2) * rx
			y4 = dcy + sin(ang2) * ry
			trianglefao dcx, dcy, x3, y3, x4, y4
		loop
		return
	}
	thick_ = double(thick)
    if thick_ < 1 : thick_ = 1.0
    rx1 = rx - thick_/2.0
    ry1 = ry - thick_/2.0
    rx2 = rx + thick_/2.0
    ry2 = ry + thick_/2.0
    if rx1 < 0 : rx1 = 0
    if ry1 < 0 : ry1 = 0
    repeat div_
        ang1 = 2.0 * M_PI * cnt / div_
        ang2 = 2.0 * M_PI * (cnt+1) / div_
        ox1 = dcx + cos(ang1) * rx2
        oy1 = dcy + sin(ang1) * ry2
        ox2 = dcx + cos(ang2) * rx2
        oy2 = dcy + sin(ang2) * ry2
        ix2 = dcx + cos(ang2) * rx1
        iy2 = dcy + sin(ang2) * ry1
        ix1 = dcx + cos(ang1) * rx1
        iy1 = dcy + sin(ang1) * ry1
        quadfao ox1,oy1, ox2,oy2, ix2,iy2, ix1,iy1
    loop
	return
#deffunc rboxfao int x1, int y1, int x2, int y2, int r, int div, int ox, int oy
	div_ = div : if div_ <= 0 : div_ = limit(6+(r-5)*(12-6)/(25-5), 6,12)
	boxfao x1+r, y1, x2-r, y2, ox,oy
	boxfao x1, y1+r, x1+r, y2-r, ox,oy
	boxfao x2-r, y1+r, x2, y2-r, ox,oy
	repeat 4
		if cnt=0 : cx=x1+r : cy=y1+r : ang0=180.0
		if cnt=1 : cx=x2-r : cy=y1+r : ang0=270.0
		if cnt=2 : cx=x2-r : cy=y2-r : ang0=0.0
		if cnt=3 : cx=x1+r : cy=y2-r : ang0=90.0
		repeat div_
			ang1 = ang0 + 90.0 * cnt/div_
			ang2 = ang0 + 90.0 * (cnt+1)/div_
			x3 = cx + cos(ang1/180.0*M_PI)*r
			y3 = cy + sin(ang1/180.0*M_PI)*r
			x4 = cx + cos(ang2/180.0*M_PI)*r
			y4 = cy + sin(ang2/180.0*M_PI)*r
			trianglefao cx,cy, x3,y3, x4,y4, ox,oy
		loop
	loop
	return
#deffunc rboxfao_auto int x1, int y1, int x2, int y2, int ox, int oy
	w = abs(x2 - x1)
	h = abs(y2 - y1)
	r = (w+h)/40
	if r > w/2 : r = w/2
	if r > h/2 : r = h/2
	if r < 1 : r = 1
	rboxfao x1,y1,x2,y2, r,0, ox,oy
	return
#global